//package com.example.quanshitest.utils;
//
//import com.example.quanshitest.entity.ProbabilityEntity;
//
//import java.text.Collator;
//import java.util.*;
//import java.util.stream.Collectors;
//
//public class MyAlgorithmUtil {
//    private MyAlgorithmUtil() {
//    }
//
//    /**
//     * 概率性抽奖
//     * @param probabilityEntityList  概率配置列表
//     * @param defaultValue 不符条件返回的默认结果
//     * @param <T> 抽奖的实体
//     * @return
//     */
//    public static <T> ProbabilityEntity<T> probabilityLottery(List<ProbabilityEntity<T>> probabilityEntityList, ProbabilityEntity<T> defaultValue) {
//        // 公平性检测
//        if (probabilityEntityList.stream().mapToDouble(ProbabilityEntity::getProbabilityValue).summaryStatistics().getSum() != 100.00) {
//            System.out.println("概率总共不为1，公平性有偏差");
//        }
//
//        // 基数建立
//        Map<Integer, Integer> numbers = new HashMap<>();
//        for (ProbabilityEntity entity : probabilityEntityList) {
//            numbers.put(entity.getId(), (int) (entity.getProbabilityValue() * 10.0));
//        }
//
//        // 基数分区
//        int idxStart = 0;
//        int idxEnd = 0;
//        List<Integer> nums = new ArrayList<>();
//        for (int i = 0; i < 1000; i++) {
//            nums.add(i);
//        }
//        Map<Integer, List<Integer>> numParts = new HashMap<>();
//        for (Map.Entry<Integer, Integer> entry : numbers.entrySet()) {
//            idxEnd = idxStart + entry.getValue();
//            if (idxEnd >= 1000) {
//                idxEnd = 1000;
//            }
//            if (entry.getValue() > 0) {
//                numParts.put(entry.getKey(), nums.subList(idxStart, idxEnd));
//            }
//            idxStart = idxEnd;
//        }
//
//        // 随机抽取
//        Random random = new Random();
//        int r = random.nextInt(1000);
//        // 基础概率数
//        for (Map.Entry<Integer, List<Integer>> entry : numParts.entrySet()) {
//            List<Integer> value = entry.getValue();
//            if (value.contains(r)) {
//                List<ProbabilityEntity> entities = probabilityEntityList.stream().filter(e -> e.getId().equals(entry.getKey())).collect(Collectors.toList());
//                if (!entities.isEmpty()) {
//                    return entities.get(0);
//                }
//            }
//        }
//        return defaultValue;
//    }
//
//    @Test
//    public void test12() {
//        Comparator comparator = Collator.getInstance(Locale.CHINA);
//        String[] str = {"胡桃","雷神","刻晴","亚瑟","阿狸","公孙离","马超","陈鑫","麻子","王二","李四","张三"};
//        //将汉字排列
//        Arrays.sort(str, comparator);
//
//        for (String s : str) {
//            System.out.println(s);
//        }
//    }
//}